package main

import (
	"log"
	"os"
	"product-management-system/config"
	"product-management-system/handlers"
	"product-management-system/middleware"

	"github.com/gin-gonic/gin"
	"github.com/joho/godotenv"
)

func main() {
	// 加载环境变量
	if err := godotenv.Load(); err != nil {
		log.Fatal("Error loading .env file")
	}

	// 初始化数据库连接
	config.InitDB()

	// 创建Gin路由引擎
	r := gin.Default()

	// 用户认证相关路由
	auth := r.Group("/auth")
	{
		auth.POST("/register", handlers.Register)
		auth.POST("/login", handlers.Login)
	}

	// API key管理相关路由（需要JWT认证）
	apiKeys := r.Group("/api-keys")
	apiKeys.Use(middleware.JWTAuthMiddleware())
	{
		apiKeys.POST("/", handlers.GenerateAPIKey)
		apiKeys.GET("/", handlers.ListAPIKeys)
		apiKeys.PUT("/:id/revoke", handlers.RevokeAPIKey)
	}

	// 管理员产品管理路由（需要JWT认证）
	admin := r.Group("/admin/products")
	admin.Use(middleware.JWTAuthMiddleware())
	{
		admin.POST("/", handlers.CreateProduct)
		admin.GET("/", handlers.ListProducts)
		admin.GET("/:id", handlers.GetProduct)
		admin.PUT("/:id", handlers.UpdateProduct)
		admin.DELETE("/:id", handlers.DeleteProduct)
	}

	// 公开API路由（需要API key认证）
	api := r.Group("/api/products")
	api.Use(middleware.APIKeyAuthMiddleware())
	{
		api.GET("/", handlers.ListProducts)
		api.GET("/:id", handlers.GetProduct)
	}

	// 启动服务器
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	if err := r.Run(":" + port); err != nil {
		log.Fatal("Server failed to start: ", err)
	}
}